package com.zhongen.wflow.workflow.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhongen.wflow.workflow.bean.vo.*;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;

import java.util.List;
import java.util.Set;

/**
 * @author : willian fu
 * @date : 2022/8/25
 */
public interface ProcessTaskService {

	/**
	 * 获取待办
	 * @param pageSize 每页条数
	 * @param pageNo 页码
	 * @param code 表单编号
	 * @return 待办任务列表
	 */
	Page<ProcessTaskVo> getUserTodoList(Integer pageSize, Integer pageNo, String code);

	/**
	 * 获取已办
	 * @param pageSize 每页条数
	 * @param pageNo 页码
	 * @param code 表单编号
	 * @return 已办任务列表
	 */
	Page<ProcessTaskVo> getUserIdoList(Integer pageSize, Integer pageNo, String code);

	/**
	 * 获取节点审批人，被flowable uel表达式自动调用
	 * @param execution 执行实例
	 * @return 该任务的审批人
	 */
	List<String> getNodeApprovalUsers(ExecutionEntity execution);

	/**
	 * 处理任务
	 * @param params 任务参数
	 */
	void approvalTask(ProcessHandlerParamsVo params);

	/**
	 * 获取抄送用户ID集合
	 * @param instance 审批实例
	 * @param execution 执行实例
	 * @param nodeId 节点ID
	 * @return 被抄送的用户
	 */
	Set<String> getCcTaskUsers(DelegateExecution execution, String instance, String nodeId);

	/**
	 * 下版实现 获取等待中且还未开始的任务，如果存在条件则需要直接解析条件
	 * @param instanceId 实例ID
	 * @return 后续流程走向任务
	 */
	List<ProcessProgressVo.ProgressNode> getFutureTask(String instanceId);

	/**
	 * 获取指定任务所有可回退的审批任务节点
	 * @param taskId 当前任务ID
	 * @param instanceId 审批实例ID
	 * @return 所有可回退节点
	 */
	List<HisApprovalNodeVo> getRecallTaskNodes(String instanceId, String taskId);

	/**
	 * 获取节点审批设置项
	 * @param taskId 要处理的任务ID
	 * @return 该任务所属节点的设置项
	 */
	NodeSettingsVo getNodeTaskSettings(String taskId);

}
